package _220329;

import java.util.Scanner;

/**
 * @author ShadowLim
 * @create 2022-03-29-8:46
 */

/**
 * 思路：画几张图观察一下可以发现一下特点：
 * 1、重边不会影响区域数目。
 * 2、每新加入一条边只要不是重边区域数目必定+1。
 * 3、加入的新边如果与之前加入的边每有一个交点则区域数目+1。
 */
public class 平面切分 {
    static int n;   // 直线条数
    static int[] k; // 斜率
    static int[] b; // y = kx + b 存b的值
    static double[] c;  // 存交点

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        n = scanner.nextInt();
        k = new int[n];
        b = new int[n];
        c = new double[n - 1];
        int cnt = 1;

        for (int i = 0; i < n; i++) {
            k[i] = scanner.nextInt();
            b[i] = scanner.nextInt();
            if (i == 0) {   // 只有一条直线 则分成2个平面 结果为2 退出当前循环
                cnt++;
                continue;
            }
            int flag = 0;   // 标记直线是否重叠
            for (int j = 0; j < i; j++) {
                if (k[j] == k[i] && b[j] == b[i]) {
                    flag = 1;   // 重叠
                }
            }
            // 如果录入的当前直线有重叠，那么就不管当前直线，继续执行，相当于去重
            if (flag == 1) {
                i--;
                n--;
                continue;
            }
            int f = 0;  // 斜率相等的直线条数
            for (int j = 0; j < i; j++) {
                if (k[i] == k[j]) {
                    f++;
                    continue;
                }
                /**
                 * 思路是不能将重复的交点计算进去（交点不重复等价于x交点不重复），c数组存放交点，下标从0开始
                 */
                c[j - f] = (double) (b[i] - b[j]) / (double)(k[j] - k[i]);
                flag = 0;
                for (int l = 0; l < j - f; l++) {
                    if (c[l] == c[j - f]) {
                        flag = 1;
                    }
                }
                if (flag == 0) {
                    cnt++;
                }
            }
            cnt++;
        }
        scanner.close();
        System.out.println(cnt);
    }
}
